$(function() {

	"use strict";

	/**
	 *  构造函数  构造器 
	 * @param {String} value 
	 * @param {Object} rule 
	 */
	window.Validator = function(value, rule) {





		this.is_valid = function(new_val) {
			
			var methodName;
			
			if (new_val != undefined){
				value = new_val ;
			}
			// value = new_val || value;
			
			
			/*如果不是必填项 且用户未填写任何内容则直接判定为合法*/
			if (rule.required === false && !value) {
				return true;
			}

			

			
			for (methodName in rule) {
				if (methodName === 'required') {
					continue;
				}

				/* 调用rule中相对应的方法 */
				var valid = this['validate_' + methodName]();
				if (!valid) {
					// 验证没有通过 
					console.log('validate_' + methodName + '  is  invalid');
					return false;
				}
			}
			// 全部通过了，返回true
			return true;
		}



		/**
		 * 函数描述 validate_xxxx
		 * 验证器 根据规则 验证是否 value 可以通过该 规则，如果可以满足规则  返回true 
		 * 否则返回false 
		 * @param {string} value 参数1的说明
		 * @param {Object} rule 参数2的说明，比较长
		 *  
		 * @return {Boolean} 返回值描述
		 */
		this.validate_min = function() {
			var real_value = pre_value(value);
			return real_value >= rule.min;
		};

		this.validate_max = function() {
			var real_value = pre_value(value);
			return real_value <= rule.max;
		};



		/**
		 * validate_min
		 * validate_max 对value 进行前置的处理工作
		 *  
		 * @param {value} value 
		 */
		var pre_value = function(value) {
			return parseFloat(value);
		}


		this.validate_maxlength = function() {

			var real_value = pre_length();
			return real_value.length <= rule.maxlength;


		};

		this.validate_minlength = function() {
			var real_value = pre_length();
			return real_value.length >= rule.minlength;

		};


		function pre_length() {
			return value.toString().trim();
		}


		this.validate_numeric = function() {
			return $.isNumeric(value) == rule.numeric;
		};

		this.validate_required = function() {
			var real = $.trim(value);

			if (!rule.required) {
				return true;
			}

			if (!real && real !== 0) {
				return false;
			} else {
				return true;
			}

		};

		// 验证 正则表达式
		this.validate_pattern = function() {
			var pattern = RegExp(rule.pattern);
			return pattern.test(value);
		}

	};

});
